iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 9
1
自我挑戰組

微程式語言白話文運動系列 第 9

微聊 MVC 模式 - Model 四部曲

  • 分享至 

  • xImage
  •  

N + 1 效能地獄

Rails 提供許多功能讓工程師在開發時是相對的簡潔快速,像 Active Record 所提供的對資料庫操作模式,就是一個讓我們方便當隨便,不小心寫入一些地獄code,而 N + 1 即是資料庫效能頭號殺手。

N + 1 問題是什麼呢?
簡易來說,當我們在 view 寫入一個對資料庫發出請求

<% books.each do |book| %>
  <%= book.title %>
  <%= book.author %>
<% end %>

傳送到 Controller 裡 並寫入所需要方法

class BooksController < ApplicationController  
  def index
    @books = Book.all
  end
end

依照 Controller 所需要的方法後對 book model 發出請求

class Book < ApplicationRecord
  belongs_to :author
end

但又因為 model 建立的關聯性而必須在從 book model 轉向 author再次發出請求

class Author < ApplicationRecord
end

這就是所謂的 N + 1 問題,就是在我們在對資料庫發出多個條件式在同一件上,而造成資料庫會重複的撈取資料。
因此,在這樣的狀況下,我們可以用

class BooksController < ApplicationController  
  def index
    @books = Book.includes(author)
  end
end

今天就聊到這裡吧!期待明天另一個新的開始囉!掰哺!


上一篇
微聊 MVC 模式 - Model 三部曲
下一篇
微聊 MVC 模式 - View 一部曲
系列文
微程式語言白話文運動30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言